/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CapaNegocios;

import controlador.ProductoJpaController;
import controlador.*;
import controlrestaurante.pmf;
import entidad.Producto;
import entidad.Unidaddemedida;
import entidad.*;
import java.util.List;
/**
 *
 * @author a
 */
public class CNProducto {
    public static boolean insertar(Producto producto)
    {        
        try{
            ProductoJpaController controlador = new ProductoJpaController(pmf.getInstancia().getEMF());
            controlador.create(producto);
        }catch (Exception e){
            return false;
        }
        return true;  
    }
    
    //******Funciones insertar**********
    public static boolean insertar(String nombre,float precio, float cantidad,int minimaExistencia, String descripcion,boolean descuentoAuto,String presentacion,int idMedida)
    {
        Unidaddemedida unidad = CNUnidadMedida.buscarId(idMedida);
        if(unidad == null)
            return false;
        try{
            Producto prod = new Producto();
            prod.setNombre(nombre);
            prod.setPresentacion(presentacion);
            prod.setCanitdad(cantidad);
            prod.setPrecio(precio);
            prod.setMinimaExistencias(minimaExistencia);
            prod.setDescripcion(descripcion);
            prod.setActivo(Boolean.TRUE);
            prod.setUnidadDeMedidaidUnidadDeMedida(unidad);
            prod.setDescuentoAutomatico(descuentoAuto);
            ProductoJpaController controlador = new ProductoJpaController(pmf.getInstancia().getEMF());
            controlador.create(prod);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
        
    }
    
    //************* FUNCIONES MODIFICAR ************88
    public static boolean modificar(Producto prod)
    {
        
        try{
            ProductoJpaController controlador = new ProductoJpaController(pmf.getInstancia().getEMF());
            controlador.edit(prod);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    public static boolean activar(int id)
    {
        ProductoJpaController contro = new ProductoJpaController(pmf.getInstancia().getEMF());
        Producto prod = contro.findProducto(id);
        if(prod == null)
            return false;
        try{
            prod.setActivo(Boolean.TRUE);
            ProductoJpaController controlador = new ProductoJpaController(pmf.getInstancia().getEMF());
            controlador.edit(prod);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    public static boolean desactivar(int id)
    {
        ProductoJpaController contro = new ProductoJpaController(pmf.getInstancia().getEMF());
        Producto prod = contro.findProducto(id);
        if(prod == null)
            return false;
        try{
            prod.setActivo(Boolean.FALSE);
            ProductoJpaController controlador = new ProductoJpaController(pmf.getInstancia().getEMF());
            controlador.edit(prod);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    //************** FFUNCION BUSCAR *********
    public static Producto buscarId(int id)
    {
        Producto pro;
        try{
           ProductoJpaController controlador = new ProductoJpaController(pmf.getInstancia().getEMF());
        pro = controlador.findProducto(id); 
        }catch (Exception e)
        {
            return null;
        }
        return pro;        
    }
    
    public static List<Producto> buscarTodos()
    {
        List <Producto> lista = (List) Consultas.consulta("Producto", "findByActivo", "activo", true);
        return lista;
    }
    public static List<Producto> buscarTodosEliminados()
    {
         List <Producto> lista = (List) Consultas.consulta("Producto", "findByActivo", "activo", false);
        return lista;
    }
    
    public static List<Producto> buscarNombre(String nombre)  
    {
        List <Producto> lista = (List) Consultas.consulta("Producto", "findByNombre", "nombre", "%"+nombre+"%");
        return lista;
    }
    
    
    public static boolean eliminar(Producto prod)
    {
        
        try{
            if(prod.getBebidasHasProductoCollection()!=null)
            {
                for(BebidasHasProducto  temp : prod.getBebidasHasProductoCollection())
                {
                    BebidasHasProductoJpaController con = new BebidasHasProductoJpaController(pmf.getInstancia().getEMF());
                    con.destroy(temp.getBebidasHasProductoPK());
                }
            }
            if(prod.getDetalleDePlatoCollection() !=null)
            {
                for(DetalleDePlato temp : prod.getDetalleDePlatoCollection())
                {
                    DetalleDePlatoJpaController con = new DetalleDePlatoJpaController(pmf.getInstancia().getEMF());
                    con.destroy(temp.getDetalleDePlatoPK());
                }
            }
            if(prod.getDetalleordensalidaCollection()!=null)
            {
                for(Detalleordensalida temp: prod.getDetalleordensalidaCollection())
                {
                    DetalleordensalidaJpaController con = new DetalleordensalidaJpaController(pmf.getInstancia().getEMF());
                    con.destroy(temp.getIdDetalleOrdenSalida());                    
                }
            }
            if(prod.getLotesCollection()!=null)
            {
                for(Lotes temp: prod.getLotesCollection())
                {
                    LotesJpaController con = new LotesJpaController(pmf.getInstancia().getEMF());
                    con.destroy(temp.getIdLotes());                    
                }
            }
            ProductoJpaController controlador = new ProductoJpaController(pmf.getInstancia().getEMF());
            controlador.destroy(prod.getIdProducto());
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    public static List <Producto> buscarCodigo(String codigo)
    {
        List <Producto> lista = (List) Consultas.consulta("Producto", "findByCodigo", "codigo", codigo+"%");
        return lista;
    }
    
    public static boolean codigoExistente(String codigo)
    {
        if("".equals(codigo))
            return false;
        List <Producto> lista =CNProducto.buscarCodigo(codigo);
        if(lista==null)
            return false;
        else
            return true;
    }
}
